์ž‘์„ฑ: 2026-03-04 05:39:06์ˆ˜์ •: 2026-03-04 05:39:06

Nuxt ๋Œ€์‹œ๋ณด๋“œ ํ”„๋กœ์ ํŠธ ์‹œ๋ฆฌ์ฆˆ (2): Naive UI์™€ UnoCSS ์—ฐ๋™ํ•˜๊ธฐ

๋Œ€์‹œ๋ณด๋“œ๋Š” ์ •๋ณด๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Naive UI์˜ ๊ฐ•๋ ฅํ•œ ์ปดํฌ๋„ŒํŠธ์™€ UnoCSS์˜ ๋น ๋ฅธ ์Šคํƒ€์ผ๋ง์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1. UnoCSS ์„ค์ • (uno.config.ts)

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— uno.config.ts ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ๊ธฐ๋ณธ ํ”„๋ฆฌ์…‹๊ณผ ๋‹จ์ถ•์–ด(Shortcuts)๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

// uno.config.ts
import { defineConfig, presetUno, presetAttributify, presetIcons } from 'unocss'
 
export default defineConfig({
  presets: [
    presetUno(), // ๊ธฐ๋ณธ ํ”„๋ฆฌ์…‹
    presetAttributify(), // ์†์„ฑ ๊ธฐ๋ฐ˜ ์Šคํƒ€์ผ ์ง€์›
    presetIcons(), // ์•„์ด์ฝ˜ ์‚ฌ์šฉ ์ง€์›
  ],
  shortcuts: {
    'flex-center': 'flex items-center justify-center',
    'card-base': 'bg-white rounded-lg shadow-sm border border-gray-200 p-4',
  }
})

2. Naive UI ํ…Œ๋งˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

Naive UI๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋งŒ์œผ๋กœ ์ „์ฒด ํ…Œ๋งˆ๋ฅผ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<!-- app.vue -->
<script setup>
import { NConfigProvider, zhCN, dateZhCN } from 'naive-ui'
 
/** @type {import('naive-ui').GlobalThemeOverrides} */
const themeOverrides = {
  common: {
    primaryColor: '#18a058',
    primaryColorHover: '#36ad6a',
  },
  Button: {
    fontWeight: 'bold'
  }
}
</script>
 
<template>
  <n-config-provider :theme-overrides="themeOverrides">
    <NuxtLayout>
      <NuxtPage />
    </NuxtLayout>
  </n-config-provider>
</template>

3. ์•„์ด์ฝ˜ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

๋Œ€์‹œ๋ณด๋“œ์—์„œ ์•„์ด์ฝ˜์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. UnoCSS์˜ presetIcons๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ณ„๋„์˜ SVG ํŒŒ์ผ ์—†์ด ํด๋ž˜์Šค๋ช…๋งŒ์œผ๋กœ ์ˆ˜๋งŒ ๊ฐœ์˜ ์•„์ด์ฝ˜์„ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<!-- ์‚ฌ์šฉ ์˜ˆ์‹œ -->
<div class="i-carbon-dashboard text-xl" /> <!-- ๋Œ€์‹œ๋ณด๋“œ ์•„์ด์ฝ˜ -->
<div class="i-carbon-user-avatar text-blue-500" /> <!-- ์œ ์ € ์•„์ด์ฝ˜ -->

4. ์™œ UnoCSS์ธ๊ฐ€?

  • ์„ฑ๋Šฅ: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋Š” ๋นŒ๋“œ ์‹œ ์™„์ „ํžˆ ์ œ๊ฑฐ๋˜์–ด CSS ์šฉ๋Ÿ‰์ด ๊ทน๋‹จ์ ์œผ๋กœ ์ž‘์•„์ง‘๋‹ˆ๋‹ค.
  • ์œ ์—ฐ์„ฑ: presetAttributify๋ฅผ ์“ฐ๋ฉด <div m-2 p-4> ์ฒ˜๋Ÿผ ์†์„ฑ ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง‘๋‹ˆ๋‹ค.

5. ๊ฒฐ๋ก 

๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ๊ธฐ์ดˆ๊ฐ€ ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋Œ€์‹œ๋ณด๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  Pinia ์Šคํ† ์–ด๋ฅผ ์„ค๊ณ„ํ•˜๋Ÿฌ ๊ฐ€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.